package com.sky.service;

import cn.mybatis.mp.core.mybatis.mapper.context.Pager;
import com.sky.dto.GetBookPagerDTO;
import com.sky.dto.UpBookDTO;
import com.sky.dto.BookFilterDTO;
import com.sky.vo.BooksVO;
import com.sky.vo.BookFilterVO;
import com.sky.dto.BookSearchDTO;
import com.sky.vo.BookSearchVO;
import com.sky.dto.AuthorBooksDTO;
import com.sky.vo.AuthorBooksPager;
import com.sky.dto.HotBooksDTO;
import com.sky.vo.HotBooksVO;

import java.util.List;

public interface BookService {

    /**
     * 根据书名，作者名，分页查询图书信息
     *
     * @param getBookPagerDTO 需求的参数（每页条数，页码，书名，作者名）
     * @return 书籍分页信息
     */
    Pager<BooksVO> getBooksPager(GetBookPagerDTO getBookPagerDTO);

    /**
     * 图书信息修改
     *
     * @param upBookDTO 图书相关内容
     */
    void upBook(UpBookDTO upBookDTO);

    /**
     * 图书删除
     *
     * @param bookId 图书ID
     */
    void deleteBook(Integer bookId);

    /**
     * 新增图书
     *
     * @param upBookDTO 图书信息
     */
    void saveBook(UpBookDTO upBookDTO);

    /**
     * 获取图书详细信息
     *
     * @param bookId 图书ID
     * @return BooksVO
     */
    BooksVO getBooksDetails(Integer bookId);

    /**
     * 根据分类和字数条件分页查询图书
     *
     * @param bookFilterDTO 查询条件（分类ID、字数范围、排序方式等）
     * @return 分页的图书信息
     */
    Pager<BookFilterVO> getBooksByFilter(BookFilterDTO bookFilterDTO);

    /**
     * 根据图书名搜索图书
     *
     * @param bookSearchDTO 搜索条件
     * @return 分页的图书信息
     */
    Pager<BookSearchVO> searchBooks(BookSearchDTO bookSearchDTO);

    /**
     * 获取作者的所有图书
     *
     * @param authorBooksDTO 查询条件
     * @return 作者图书分页信息
     */
    AuthorBooksPager getAuthorBooks(AuthorBooksDTO authorBooksDTO);

    /**
     * 获取热门书籍排行榜
     * @param hotBooksDTO 分页参数
     * @return 热门书籍分页数据
     */
    Pager<HotBooksVO> getHotBooks(HotBooksDTO hotBooksDTO);

}
